/** 系统页面枚举 */
export enum SystemPageEnum {
  role = 'system/role',
  user = 'system/user',
  menu = 'system/menu',
  department = 'system/department',
  company = 'crm/company',
  employee = 'crm/employee'
}

/**
 * 规范化系统页面
 * @param pageEnum 系统页面枚举
 * @returns
 */
function normalizeSystemPage(pageEnum: SystemPageEnum) {
  switch (pageEnum) {
    case SystemPageEnum.role:
      return handle(SystemPageEnum.role, '角色');
    case SystemPageEnum.user:
      return handle(SystemPageEnum.user, '用户');
    case SystemPageEnum.menu:
      return handle(SystemPageEnum.menu, '菜单');
    case SystemPageEnum.department:
      return handle(SystemPageEnum.department, '部门');
    case SystemPageEnum.company:
      return handle(SystemPageEnum.company, '公司');
    case SystemPageEnum.employee:
      return handle(SystemPageEnum.employee, '员工');
    default:
      const _: never = pageEnum;
      return _;
  }
}

function handle(path: string, zh: string) {
  return {
    /** 控制器路径 */
    path,

    /** 控制器标签 */
    tag: `${zh}管理模块`,

    /** 创建模块 */
    create: {
      path: `create`,
      tag: `创建${zh}`
    },

    /** 更新模块 */
    update: {
      path: `update/:id`,
      arg: 'id',
      tag: `根据id号更新${zh}`
    },

    /** 删除模块 */
    delete: {
      path: `delete/:id`,
      arg: 'id',
      tag: `根据id号删除${zh}`
    },

    /** 查询模块 */
    list: {
      path: `list`,
      tag: `${zh}列表查询`
    },

    /** 键值对查询模块 */
    recode: {
      path: `recode`,
      tag: `${zh}键值对查询`
    },

    /** 分页查询模块 */
    page: {
      path: `pageQuery`,
      tag: `${zh}分页查询`
    },

    /** 详情查询模块 */
    detail: {
      path: `detail/:id`,
      arg: 'id',
      tag: `根据id号查询${zh}详情`
    },
    listByIds: {
      path: `listByIds`,
      tag: `${zh}根据ids查询`
    }
  };
}

/** 用户页面规范化 */
export const userNormalize = normalizeSystemPage(SystemPageEnum.user);
/** 角色页面规范化 */
export const roleNormalize = normalizeSystemPage(SystemPageEnum.role);
/** 菜单页面规范化 */
export const menuNormalize = normalizeSystemPage(SystemPageEnum.menu);
/** 部门页面规范化 */
export const departmentNormalize = normalizeSystemPage(
  SystemPageEnum.department
);
/** 公司页面规范化 */
export const companyNormalize = normalizeSystemPage(SystemPageEnum.company);
/** 雇员页面规范化 */
export const employeeNormalize = normalizeSystemPage(SystemPageEnum.employee);
